package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
	"xorm.io/xorm"
)

func main() {
	//数据库连接基本信息。参考中文文档：https://gitea.com/xorm/xorm/src/branch/master/README_CN.md#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B
	var (
		username  string = "root"
		password  string = "qaqq221root."
		ipAddress string = "127.0.0.1"
		port      int    = 3306
		dbName    string = "go_sql_xorm_test"
		charset   string = "utf8mb4"
	)
	//构建数据库连接信息
	dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", username, password, ipAddress, port, dbName, charset)

	//第一步创建引擎，driverName, dataSourceName 和 database/sql 接口相同。返回的engine就是xorm的核心引擎
	engine, err := xorm.NewEngine("mysql", dataSourceName)

	//连接的时候就报错
	if err != nil {
		fmt.Println("数据库连接失败")
	}

	//定义一个和表同步的结构体，并且自动同步结构体信息到数据库。你要给数据库增加减少什么字段，就在结构体中对应的增加减少，然后重新执行程序，数据库中就会相应增加减少字段
	type User struct {
		Id      int64
		Name    string
		Age     int
		Passwd  string    `xorm:"varchar(200)"`
		Created time.Time `xorm:"created"`
		Updated time.Time `xorm:"updated"`
	}

	//创建一个User对象，xorm的引擎自动把struct中的信息同步到数据库的对应表，例如表User中
	err = engine.Sync(new(User))
	//创建同步过程时失败
	if err != nil {
		fmt.Println("表结构同步失败")
	}

}
